﻿using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Smart
{
    public partial class frmOfflineEvrak : Form
    {
        public DateTime Tarih { get; set; }
        public string EvrakSeri { get; set; }
        public int EvrakSira { get; set; }
        public string BelgeNo { get; set; }
        public Cari SecilenCari { get; set; }
        public int Vade { get; set; }
        public bool EskiEvrak { get; set; }
        public string SrmKod { get; set; }
        public bool Degistirilebilir { get; set; }
        public Dictionary<int, decimal> _dovizKurlari = new Dictionary<int, decimal>();
        private bool EvrakDegisti = false;
        DataTable GridData = new DataTable();

        private DbStok _aktifStok = null;

        public frmOfflineEvrak()
        {
            InitializeComponent();
            this.Degistirilebilir = true;
        }

        private decimal[] IskontoBul(string stok, string cari, int vade)
        {
            decimal[] isk = new decimal[6];
            using (Query q = new Query(ProgramTipleri.SqlCe))
            {
                q.Add(string.Format("SELECT     matris_isk1, matris_isk2, matris_isk3, matris_isk4, matris_isk5, matris_isk6  FROM         TBL_MATRIS WHERE     (matris_stok = '{0}') AND (matris_cari = '{1}') AND (matris_vade = {2})", stok, cari, vade));
                var sonuc = q.ToList(new { isk1 = 0m, isk2 = 0m, isk3 = 0m, isk4 = 0m, isk5 = 0m, isk6 = 0m }).FirstOrDefault();
                if (sonuc != null)
                {
                    isk[0] = Cevir.Parse<decimal>(sonuc.isk1);
                    isk[1] = Cevir.Parse<decimal>(sonuc.isk2);
                    isk[2] = Cevir.Parse<decimal>(sonuc.isk3);
                    isk[3] = Cevir.Parse<decimal>(sonuc.isk4);
                    isk[4] = Cevir.Parse<decimal>(sonuc.isk5);
                    isk[5] = Cevir.Parse<decimal>(sonuc.isk6);
                }
            }
            return isk;
        }

        private string DovizAdi(byte idx)
        {
            switch (idx)
            {
                case 1:
                    return "USD";
                case 2:
                    return "EUR";
                case 3:
                    return "CAD";
                case 4:
                    return "DKK";
                default:
                    return "TL";
            }
        }

        private decimal DovizKur(byte idx)
        {
            if (_dovizKurlari.ContainsKey(idx))
            {
                return _dovizKurlari[idx];
            }
            else
                return 1m;
        }

        public void UrunBul(string barkod)
        {
            string kod = string.Empty;
            using (Query q = new Query(ProgramTipleri.SqlCe))
            {
                byte birimid = 1;
                q.Add(string.Format("SELECT bk_stok_kodu,bk_birimno FROM TBL_BARKOD WHERE     (bk_barkod = '{0}')", barkod));
                var sonuc = q.ToList(new { kod = "", birim = byte.MinValue }).FirstOrDefault();
                if (sonuc != null)
                {
                    kod = sonuc.kod;
                    birimid = sonuc.birim;
                }
                else
                {
                    kod = barkod;
                }

                q.Add(string.Format("SELECT rec_id,stk_kod,stk_adi,stk_dvz,stk_birim1adi,stk_birim1katsayi,stk_birim2adi,stk_birim2katsayi,stk_birim3adi,stk_birim3katsayi,stk_birim4adi,stk_birim4katsayi,stk_fiyat1,stk_fiyat2,stk_fiyat3,stk_fiyat4,stk_fiyat5,stk_iskonto1_kod,stk_iskonto2_kod,stk_iskonto3_kod,stk_iskonto4_kod,stk_iskonto5_kod,stk_vergi_no,stk_vergi_oran FROM TBL_STOK WHERE (stk_kod = '{0}')", kod));
                var stok = q.ToList(new { id = 0, kod = "", adi = "", dvz = byte.MinValue, birim1adi = "", birim1katsayi = 0m, birim2adi = "", birim2katsayi = 0m, birim3adi = "", birim3katsayi = 0m, birim4adi = "", birim4katsayi = 0m, fiyat1 = 0m, fiyat2 = 0m, fiyat3 = 0m, fiyat4 = 0m, fiyat5 = 0m, iskonto1_kod = "", iskonto2_kod = "", iskonto3_kod = "", iskonto4_kod = "", iskonto5_kod = "", vergiId = byte.MinValue, vergiOran = 0m }).FirstOrDefault();
                if (stok != null)
                {
                    _aktifStok = new DbStok()
                    {
                        Adi = stok.adi,
                        birim1Adi = stok.birim1adi,
                        birim1Katsayi = Cevir.Parse<decimal>(stok.birim1katsayi),
                        birim2Adi = stok.birim2adi,
                        birim2Katsayi = Cevir.Parse<decimal>(stok.birim2katsayi),
                        birim3Adi = stok.birim3adi,
                        birim3Katsayi = Cevir.Parse<decimal>(stok.birim3katsayi),
                        birim4Adi = stok.birim4adi,
                        birim4Katsayi = Cevir.Parse<decimal>(stok.birim4katsayi),
                        dovizCinsi = stok.dvz,
                        fiyat1 = Cevir.Parse<decimal>(stok.fiyat1),
                        fiyat1Iskonto = stok.iskonto1_kod,
                        fiyat2 = Cevir.Parse<decimal>(stok.fiyat2),
                        fiyat2Iskonto = stok.iskonto2_kod,
                        fiyat3 = Cevir.Parse<decimal>(stok.fiyat3),
                        fiyat3Iskonto = stok.iskonto3_kod,
                        fiyat4 = Cevir.Parse<decimal>(stok.fiyat4),
                        fiyat4Iskonto = stok.iskonto4_kod,
                        fiyat5 = Cevir.Parse<decimal>(stok.fiyat5),
                        fiyat5Iskonto = stok.iskonto5_kod,
                        Kod = stok.kod,
                        recId = stok.id,
                        VergiOran = Cevir.Parse<decimal>(stok.vergiOran),
                        VergiSira = stok.vergiId
                    };

                    cmbBirim.Items.Clear();
                    if (!string.IsNullOrEmpty(stok.birim1adi))
                        cmbBirim.Items.Add(new ComboItem() { Text = stok.birim1adi, Value = stok.birim1katsayi });
                    if (!string.IsNullOrEmpty(stok.birim2adi))
                        cmbBirim.Items.Add(new ComboItem() { Text = stok.birim2adi, Value = stok.birim2katsayi });
                    if (!string.IsNullOrEmpty(stok.birim3adi))
                        cmbBirim.Items.Add(new ComboItem() { Text = stok.birim3adi, Value = stok.birim3katsayi });
                    if (!string.IsNullOrEmpty(stok.birim4adi))
                        cmbBirim.Items.Add(new ComboItem() { Text = stok.birim4adi, Value = stok.birim4katsayi });

                    if (birimid <= cmbBirim.Items.Count)
                    {
                        cmbBirim.SelectedIndex = birimid - 1;
                    }
                    else
                    {
                        if (cmbBirim.Items.Count > 0)
                        {
                            cmbBirim.SelectedIndex = 0;
                        }
                    }

                    txtBarkod.Text = string.Empty;
                    txtStokAdi.Text = stok.adi;
                    lblFiyat.Text = string.Format("Fiyat({0}):", DovizAdi(stok.dvz));
                    string stokIskKod = string.Empty;
                    switch (this.SecilenCari.FiyatNo)
                    {
                        case 1:
                            txtFiyat.Text = (stok.fiyat1 * DovizKur(stok.dvz)).ToString("n3");
                            stokIskKod = stok.iskonto1_kod;
                            break;
                        case 2:
                            txtFiyat.Text = (stok.fiyat2 * DovizKur(stok.dvz)).ToString("n3");
                            stokIskKod = stok.iskonto2_kod;
                            break;
                        case 3:
                            txtFiyat.Text = (stok.fiyat3 * DovizKur(stok.dvz)).ToString("n3");
                            stokIskKod = stok.iskonto3_kod;
                            break;
                        case 4:
                            txtFiyat.Text = (stok.fiyat4 * DovizKur(stok.dvz)).ToString("n3");
                            stokIskKod = stok.iskonto4_kod;
                            break;
                        case 5:
                            txtFiyat.Text = (stok.fiyat5 * DovizKur(stok.dvz)).ToString("n3");
                            stokIskKod = stok.iskonto5_kod;
                            break;
                        default:
                            txtFiyat.Text = (stok.fiyat1 * DovizKur(stok.dvz)).ToString("n3");
                            stokIskKod = stok.iskonto1_kod;
                            break;
                    }

                    decimal[] iskontolar = IskontoBul(stokIskKod, this.SecilenCari.IskontoKodu, Vade);
                    txtIsk1.Text = iskontolar[0].ToString();
                    txtIsk2.Text = iskontolar[1].ToString();
                    txtIsk3.Text = iskontolar[2].ToString();
                    txtMiktar.Text = "1";
                    txtMiktar.Focus();
                    txtMiktar.SelectAll();
                }
                else
                {
                    MessageBox.Show("Ürün Bulunamadı !");

                    ClearTextbox();

                }
            }
        }

        private void ClearTextbox()
        {
            _aktifStok = null;
            txtBarkod.Text = string.Empty;
            txtStokAdi.Text = string.Empty;
            txtFiyat.Text = string.Empty;
            txtIsk1.Text = string.Empty;
            txtIsk2.Text = string.Empty;
            txtIsk3.Text = string.Empty;
            lblFiyat.Text = "Fiyat:";
            cmbBirim.Items.Clear();
            txtMiktar.Text = string.Empty;
            txtBarkod.Focus();
        }

        private int MaxSatir()
        {
            int sira = 0;
            using (Query q = new Query(ProgramTipleri.SqlCe))
            {
                q.Add(string.Format("select max(evr_satir) FROM TBL_EVRAK where evr_seri='{0}' and evr_sira={1}", this.EvrakSeri, this.EvrakSira));
                sira = q.ExecScaler<int>();
            }
            return sira + 1;
        }

        private void SatirSil(int satirno)
        {
            using (Query q = new Query(ProgramTipleri.SqlCe))
            {
                q.Add("delete from TBL_EVRAK where evr_cins=0 and evr_seri=@seri and evr_sira=@sira and evr_satir =@satir");
                q.Add("@seri", SqlDbType.NVarChar, this.EvrakSeri);
                q.Add("@sira", SqlDbType.Int, this.EvrakSira);
                q.Add("@satir", SqlDbType.Int, satirno);
                q.Exec();
            }
            ClearTextbox();
        }

        private void SubTotal()
        {
            decimal aratoplam = 0;
            decimal iskonto = 0;
            decimal kdv = 0;
            decimal yekun = 0;
            for (int i = 0; i < GridData.Rows.Count; i++)
            {
                aratoplam += Cevir.Parse<decimal>(GridData.Rows[i][4]);
                iskonto += Cevir.Parse<decimal>(GridData.Rows[i][5]);
                kdv += Cevir.Parse<decimal>(GridData.Rows[i][6]);
                yekun += Cevir.Parse<decimal>(GridData.Rows[i][7]);
            }
            txtAratoplam.Text = aratoplam.ToString("n3");
            txtIskontoToplam.Text = iskonto.ToString("n3");
            txtKdvToplam.Text = kdv.ToString("n3");
            txtYekun.Text = yekun.ToString("n3");
        }

        private void SatirEkle()
        {
            using (Query q = new Query(ProgramTipleri.SqlCe))
            {
                StringBuilder sb = new StringBuilder();
                sb.Append("INSERT INTO TBL_EVRAK (evr_tip, evr_cins, evr_seri, evr_sira, evr_satir, evr_belgeno, evr_tarih, evr_saticikod, evr_carikod, evr_giris_depo, evr_cikis_depo, evr_srm_merkezi, evr_stokkod, ");
                sb.Append(" evr_fiyat, evr_miktar, evr_tutar, evr_isk1_tutar, evr_isk2_tutar, evr_isk3_tutar, evr_isk4_tutar, evr_isk5_tutar, evr_isk6_tutar, evr_isk1_oran, evr_isk2_oran,evr_isk3_oran, evr_isk4_oran, evr_isk5_oran, evr_isk6_oran, evr_vergi_id, evr_vergi_tutar, evr_gonderildi,evr_vade,evr_aciklama) ");
                sb.Append(" VALUES     (@tip,@cins,@seri,@sira,@satir,@belgeno,@tarih,@satici,@cari,@girisDepo,@cikisDepo,@srm,@stokkod,@fiyat,@miktar,@tutar,@isk1Tutar,@isk2Tutar,@isk3Tutar,@isk4Tutar,@isk5Tutar,@isk6Tutar,@isk1Oran,@isk2Oran,@isk3Oran,@isk4Oran,@isk5Oran,@isk6Oran,@vergino,@vergiTutar,2,@vade,@aciklama)");
                q.Add(sb.ToString());
                q.Add("@tip", SqlDbType.TinyInt, 0);
                q.Add("@cins", SqlDbType.TinyInt, 0);
                q.Add("@seri", SqlDbType.NVarChar, this.EvrakSeri, 5);
                q.Add("@sira", SqlDbType.Int, this.EvrakSira);
                int satir = MaxSatir();
                q.Add("@satir", SqlDbType.Int, satir);
                q.Add("@belgeno", SqlDbType.NVarChar, this.BelgeNo, 5);
                q.Add("@tarih", SqlDbType.DateTime, this.Tarih);
                q.Add("@satici", SqlDbType.NVarChar, Program.Session[Settings.PlasiyerKodu].ToString(), 25);
                q.Add("@cari", SqlDbType.NVarChar, this.SecilenCari.Kodu, 25);
                q.Add("@girisDepo", SqlDbType.Int, Program.Session.VarsayilanDepo());
                q.Add("@cikisDepo", SqlDbType.Int, Program.Session.VarsayilanDepo());
                q.Add("@vade", SqlDbType.Int, this.Vade);
                q.Add("@srm", SqlDbType.NVarChar, this.SrmKod, 25);
                q.Add("@stokkod", SqlDbType.NVarChar, _aktifStok.Kod, 25);
                q.Add("@aciklama", SqlDbType.NVarChar, txtAciklama.Text, 100);

                decimal fiyat = Cevir.Parse<decimal>(txtFiyat.Text);
                decimal miktar = Cevir.Parse<decimal>(txtMiktar.Text);
                decimal tutar = fiyat * miktar;
                decimal isk1Oran = Cevir.Parse<decimal>(txtIsk1.Text);
                decimal isk2Oran = Cevir.Parse<decimal>(txtIsk2.Text);
                decimal isk3Oran = Cevir.Parse<decimal>(txtIsk3.Text);

                decimal isk1Tutar = (tutar * ((100 + isk1Oran) / 100)) - tutar;
                decimal isk2Tutar = ((tutar - isk1Tutar) * ((100 + isk2Oran) / 100)) - (tutar - isk1Tutar);
                decimal isk3Tutar = ((tutar - isk1Tutar - isk2Tutar) * ((100 + isk3Oran) / 100)) - (tutar - isk1Tutar - isk2Tutar);

                decimal netTutar = tutar - isk1Tutar - isk2Tutar - isk3Tutar;
                decimal kdvTutar = (netTutar * ((100 + _aktifStok.VergiOran) / 100)) - netTutar;

                q.Add("@fiyat", SqlDbType.Decimal, fiyat);
                q.Add("@miktar", SqlDbType.Decimal, miktar);
                q.Add("@tutar", SqlDbType.Decimal, tutar);
                q.Add("@isk1Tutar", SqlDbType.Decimal, isk1Tutar);
                q.Add("@isk2Tutar", SqlDbType.Decimal, isk2Tutar);
                q.Add("@isk3Tutar", SqlDbType.Decimal, isk3Tutar);
                q.Add("@isk4Tutar", SqlDbType.Decimal, 0);
                q.Add("@isk5Tutar", SqlDbType.Decimal, 0);
                q.Add("@isk6Tutar", SqlDbType.Decimal, 0);
                q.Add("@isk1Oran", SqlDbType.Decimal, isk1Oran);
                q.Add("@isk2Oran", SqlDbType.Decimal, isk2Oran);
                q.Add("@isk3Oran", SqlDbType.Decimal, isk3Oran);
                q.Add("@isk4Oran", SqlDbType.Decimal, 0);
                q.Add("@isk5Oran", SqlDbType.Decimal, 0);
                q.Add("@isk6Oran", SqlDbType.Decimal, 0);
                q.Add("@vergino", SqlDbType.TinyInt, _aktifStok.VergiSira);
                q.Add("@vergiTutar", SqlDbType.Decimal, kdvTutar);
                try
                {
                    q.Exec();
                    GridData.Rows.Add(_aktifStok.Adi, txtMiktar.Text, _aktifStok.Kod, satir, tutar, (isk1Tutar + isk2Tutar + isk3Tutar), kdvTutar, (netTutar + kdvTutar), fiyat, (netTutar / miktar).ToString("n3"), netTutar.ToString("n3"), _aktifStok.Kod, isk1Oran, isk2Oran, isk3Oran);
                    EvrakDegisti = true;
                }
                catch (Exception ex)
                {
                    ExceptionHandling.Hand(ex);
                }
            }
            SubTotal();
            ClearTextbox();
        }

        private void EvrakOku()
        {
            using (Query q = new Query(ProgramTipleri.SqlCe))
            {
                StringBuilder sb = new StringBuilder();
                sb.Append("SELECT evr.evr_tarih, evr.evr_belgeno, evr.evr_carikod, stk.stk_kod, stk.stk_adi, evr.evr_miktar, evr.evr_satir,evr.evr_fiyat, evr.evr_tutar, evr.evr_isk1_tutar, evr.evr_isk2_tutar, evr.evr_isk3_tutar, evr.evr_isk4_tutar,evr.evr_isk5_tutar, evr.evr_isk6_tutar, evr.evr_vergi_tutar, evr.evr_isk1_oran, evr.evr_isk2_oran, evr.evr_isk3_oran ");
                sb.Append(" FROM         TBL_EVRAK as evr INNER JOIN  TBL_STOK as stk ON evr.evr_stokkod = stk.stk_kod ");
                sb.Append(" where evr.evr_seri=@seri and evr.evr_sira=@sira and evr.evr_cins=@cins ");

                q.Add(sb.ToString());
                q.Add("@seri", SqlDbType.NVarChar, this.EvrakSeri);
                q.Add("@sira", SqlDbType.NVarChar, this.EvrakSira);
                q.Add("@cins", SqlDbType.NVarChar, 0);
                DataTable dt = q.Fill();
                if (dt.Rows.Count > 0)
                {
                    SecilenCari = new Cari().CariBilgileri(dt.Rows[0]["evr_carikod"].ToString());
                    this.Tarih = Cevir.Parse<DateTime>(dt.Rows[0]["evr_tarih"]);
                    this.BelgeNo = dt.Rows[0]["evr_belgeno"].ToString();

                    decimal fiyat;
                    decimal miktar;
                    decimal tutar;
                    decimal isk1Tutar;
                    decimal isk2Tutar;
                    decimal isk3Tutar;
                    decimal isk1Oran;
                    decimal isk2Oran;
                    decimal isk3Oran;
                    decimal netTutar;
                    decimal kdvTutar;

                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        fiyat = Cevir.Parse<decimal>(dt.Rows[i]["evr_fiyat"]);
                        miktar = Cevir.Parse<decimal>(dt.Rows[i]["evr_miktar"]);
                        tutar = fiyat * miktar;

                        isk1Tutar = Cevir.Parse<decimal>(dt.Rows[i]["evr_isk1_tutar"]);
                        isk2Tutar = Cevir.Parse<decimal>(dt.Rows[i]["evr_isk2_tutar"]);
                        isk3Tutar = Cevir.Parse<decimal>(dt.Rows[i]["evr_isk3_tutar"]);

                        isk1Oran = Cevir.Parse<decimal>(dt.Rows[i]["evr_isk1_oran"]);
                        isk2Oran = Cevir.Parse<decimal>(dt.Rows[i]["evr_isk2_oran"]);
                        isk3Oran = Cevir.Parse<decimal>(dt.Rows[i]["evr_isk3_oran"]);

                        netTutar = tutar - isk1Tutar - isk2Tutar - isk3Tutar;
                        kdvTutar = Cevir.Parse<decimal>(dt.Rows[i]["evr_vergi_tutar"]);

                        GridData.Rows.Add(dt.Rows[i]["stk_adi"], miktar, dt.Rows[i]["stk_kod"], dt.Rows[i]["evr_satir"], tutar, (isk1Tutar + isk2Tutar + isk3Tutar), kdvTutar, (netTutar + kdvTutar), fiyat, (netTutar / miktar).ToString("n3"), netTutar.ToString("n3"), dt.Rows[i]["stk_kod"].ToString(), isk1Oran, isk2Oran, isk3Oran);
                    }
                }
            }
            SubTotal();
        }

        private void StokListe(string filtre, bool adi)
        {
            string aranan = "";
            if (string.IsNullOrEmpty(filtre))
                aranan = "%";
            else
                aranan = filtre.Replace('*', '%');

            using (Query q = new Query(ProgramTipleri.SqlCe))
            {
                if (adi)
                    q.Add(string.Format("SELECT     stk_adi AS [Stok Adı],stk_fiyat1 as [Fiyat],(case when stk_dvz =1 then 'USD' when stk_dvz =2 then 'EUR' when stk_dvz =3 then 'CAD' when stk_dvz =4 then 'DKK' ELSE 'TL' END ) as [Doviz],stk_birim1adi as [Birim], stk_kod AS [Stok Kodu]  FROM         TBL_STOK WHERE     (stk_adi LIKE '{0}') order by stk_adi asc ", aranan));
                else
                    q.Add(string.Format("SELECT     stk_adi AS [Stok Adı],stk_fiyat1 as [Fiyat],(case when stk_dvz =1 then 'USD' when stk_dvz =2 then 'EUR' when stk_dvz =3 then 'CAD' when stk_dvz =4 then 'DKK' ELSE 'TL' END ) as [Doviz],stk_birim1adi as [Birim], stk_kod AS [Stok Kodu]  FROM         TBL_STOK WHERE     (stk_kod LIKE N'{0}') order by stk_adi asc ", aranan));

                var list = q.ToList(new { Adi = "", Fiyat = 0m, Doviz = "", Birim = "", Kodu = "" });
                gridView2.SuspendLayout();
                gridView2.DataSource = list;
                gridView2.SetColumnStyles(list, new[] 
                                            { 
                                                new ColumnStyle("Stok Adı","Adi", 250),
                                                new ColumnStyle("Fiyat","Fiyat", 100),
                                                new ColumnStyle("Döviz","Doviz", 100),
                                                new ColumnStyle("Birim","Birim", 75),
                                                new ColumnStyle("Stok Kodu","Kodu", 150)
                                            });
                gridView2.ResumeLayout();
                tabControl1.SelectedIndex = 1;
                gridView2.AutoSizeCol();
            }

        }

        private void frmOfflineEvrak_Load(object sender, EventArgs e)
        {
            GridData.Columns.Add("Stok Adı", typeof(string));
            GridData.Columns.Add("Miktar", typeof(decimal));
            GridData.Columns.Add("Barkod", typeof(string));
            GridData.Columns.Add("Satir", typeof(string));

            GridData.Columns.Add("aratoplam", typeof(decimal));
            GridData.Columns.Add("iskonto", typeof(decimal));
            GridData.Columns.Add("kdv", typeof(decimal));
            GridData.Columns.Add("yekun", typeof(decimal));

            GridData.Columns.Add("Brt.Fiyat", typeof(decimal));
            GridData.Columns.Add("Net Fiyat", typeof(decimal));
            GridData.Columns.Add("Net Tutar", typeof(decimal));

            GridData.Columns.Add("Stok Kodu", typeof(string));
            GridData.Columns.Add("1.İsk", typeof(decimal));
            GridData.Columns.Add("2.İsk", typeof(decimal));
            GridData.Columns.Add("3.İsk", typeof(decimal));

            gridView1.VeriKaynagi = GridData;
            gridView1.Columns[0].Width = 175;
            gridView1.Columns[1].Width = 40;
            gridView1.Columns[2].Width = -1;
            gridView1.Columns[3].Width = -1;
            gridView1.Columns[4].Width = -1;
            gridView1.Columns[5].Width = -1;
            gridView1.Columns[6].Width = -1;
            gridView1.Columns[7].Width = -1;
            gridView1.Columns[8].Width = 40;
            gridView1.Columns[9].Width = 40;
            gridView1.Columns[10].Width = 40;

            gridView1.Columns[11].Width = 100;
            gridView1.Columns[12].Width = 40;
            gridView1.Columns[13].Width = 40;
            gridView1.Columns[14].Width = 40;

            if (this.EskiEvrak)
            {
                try
                {
                    Cursor.Current = Cursors.WaitCursor;
                    EvrakOku();
                }
                catch (Exception ex)
                {
                    ExceptionHandling.Hand(ex);
                }
                finally
                {
                    Cursor.Current = Cursors.Default;
                }
            }

            using (Query q = new Query(ProgramTipleri.SqlCe))
            {
                q.Add("select doviz_no,doviz_kur FROM TBL_DOVIZ");
                var sonuc = q.ToList(new { no = 0, kur = 0m });
                foreach (var item in sonuc)
                {
                    if (!_dovizKurlari.ContainsKey(item.no))
                    {
                        _dovizKurlari.Add(item.no, item.kur);
                    }
                }
            }

            if (!Degistirilebilir)
            {
                btnCikar.Enabled = false;
                btnEkle.Enabled = false;
                btnYeni.Enabled = false;
                txtMiktar.ReadOnly = true;
            }
            txtBarkod.Focus();
        }

        private void txtBarkod_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                if (!string.IsNullOrEmpty(txtBarkod.Text))
                {
                    UrunBul(txtBarkod.Text);
                }
                else
                {
                    txtStokAdi.Focus();
                }
            }
        }

        private void btnEkle_Click(object sender, EventArgs e)
        {
            if (_aktifStok != null && !string.IsNullOrEmpty(txtMiktar.Text) && !string.IsNullOrEmpty(txtFiyat.Text))
            {
                SatirEkle();
            }
        }

        private void btnCikar_Click(object sender, EventArgs e)
        {
            if (gridView1.CurrentRowIndex > -1)
            {
                try
                {
                    DialogResult dlg = MessageBox.Show("Silmek İstediğinize Eminmisiniz ?", "Uyarı", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
                    if (dlg == DialogResult.Yes)
                    {
                        int satir = Cevir.Parse<int>(gridView1[gridView1.CurrentRowIndex, 3]);
                        SatirSil(satir);
                        gridView1.RemoveRow(gridView1.CurrentRowIndex);
                        SubTotal();
                    }
                }
                catch (Exception ex)
                {
                    ExceptionHandling.Hand(ex);
                }
            }
        }

        private void txtMiktar_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                if (_aktifStok != null && !string.IsNullOrEmpty(txtMiktar.Text) && !string.IsNullOrEmpty(txtFiyat.Text))
                {
                    SatirEkle();
                }
            }
        }

        private void btnKapat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnYeni_Click(object sender, EventArgs e)
        {
            ClearTextbox();
        }

        private void btnBarkodAra_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(txtBarkod.Text))
            {
                StokListe(txtBarkod.Text, false);
            }
        }

        private void btnStokAdiAra_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(txtStokAdi.Text))
            {
                StokListe(txtStokAdi.Text, true);
            }
        }

        private void gridView2_DoubleClick(object sender, EventArgs e)
        {
            GridSec();
        }

        private void EvrakSil(string seri, int sira, int cins)
        {
            using (Query q = new Query(ProgramTipleri.SqlCe))
            {
                q.Add("delete from TBL_EVRAK where evr_seri=@seri and evr_sira=@sira and evr_cins=@cins");
                q.Add("@seri", SqlDbType.NVarChar, seri);
                q.Add("@sira", SqlDbType.NVarChar, sira);
                q.Add("@cins", SqlDbType.NVarChar, cins);

                try
                {
                    q.Exec();
                }
                catch (Exception ex)
                {
                    ExceptionHandling.Hand(ex);
                }
            }
        }

        private void EvrakUpdate(string seri, int sira, int cins)
        {
            using (Query q = new Query(ProgramTipleri.SqlCe))
            {
                q.Add("UPDATE TBL_EVRAK set evr_gonderildi=0 where evr_gonderildi=2 and evr_seri=@seri and evr_sira=@sira and evr_cins=@cins");
                q.Add("@seri", SqlDbType.NVarChar, seri);
                q.Add("@sira", SqlDbType.NVarChar, sira);
                q.Add("@cins", SqlDbType.NVarChar, cins);

                try
                {
                    q.Exec();
                }
                catch (Exception ex)
                {
                    ExceptionHandling.Hand(ex);
                }
            }
        }

        private void GridSec()
        {
            if (gridView2.CurrentRowIndex > -1)
            {
                try
                {
                    Cursor.Current = Cursors.WaitCursor;
                    string kod = gridView2[gridView2.CurrentRowIndex, 4].ToString();
                    if (!string.IsNullOrEmpty(kod))
                    {
                        UrunBul(kod);
                    }
                    tabControl1.SelectedIndex = 0;
                }
                catch (Exception ex)
                {
                    ExceptionHandling.Hand(ex);
                }
                finally
                {
                    Cursor.Current = Cursors.Default;
                }
            }
        }

        bool sipShow = false;
        private void btnKlavye_Click(object sender, EventArgs e)
        {
            if (sipShow)
            {
                sipShow = false;
                Sip.Hide();
            }
            else
            {
                sipShow = true;
                Sip.Show();
            }
            txtStokAdi.Focus();
        }

        private void txtFiyat_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                txtIsk1.Focus();
            }
        }

        private void txtIsk1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                txtIsk2.Focus();
            }
        }

        private void txtIsk2_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                txtIsk3.Focus();
            }
        }

        private void txtIsk3_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                txtMiktar.Focus();
            }
        }

        private void frmOfflineEvrak_Activated(object sender, EventArgs e)
        {
            txtBarkod.Focus();
        }

        private void txtStokAdi_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                txtFiyat.Focus();
            }
        }

        private void gridView2_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                GridSec();
            }
        }

        private void frmOfflineEvrak_Closing(object sender, CancelEventArgs e)
        {
            if (EvrakDegisti)
            {
                DialogResult dlg = MessageBox.Show("Kaydetmek için Yes\r\nVazgeçmek için No\r\nDevam etmek için Cancel\r\n seçiniz !", "Uyarı", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
                if (dlg == DialogResult.Cancel)
                {
                    e.Cancel = true;
                }
                else if (dlg == DialogResult.Yes)
                {
                    EvrakUpdate(this.EvrakSeri, this.EvrakSira, 0);
                }
                else if (dlg == DialogResult.No)
                {
                    EvrakSil(this.EvrakSeri, this.EvrakSira, 0);
                }
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            txtIsk1.Text = "100";
            txtIsk2.Text = "";
            txtIsk3.Text = "";
            txtMiktar.Focus();
        }

        private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (tabControl1.SelectedIndex == 2)
            {
                cariBilgi1.Load(SecilenCari.Kodu);
            }
        }

        private void btnMiktar_Click(object sender, EventArgs e)
        {
            try
            {
                Cursor.Current = Cursors.WaitCursor;
                tabControl1.SelectedIndex = 3;
                using (Query q = new Query(ProgramTipleri.SqlCe))
                {
                    q.Add("SELECT        TBL_DEPO.depo_adi AS [Depo Adı], TBL_ENVANTER.env_miktar AS Miktar  FROM TBL_ENVANTER INNER JOIN TBL_DEPO ON TBL_ENVANTER.depo_id = TBL_DEPO.rec_id WHERE        (TBL_ENVANTER.rec_id = @id)");
                    q.Add("@id", SqlDbType.Int, _aktifStok.recId);
                    gridView3.VeriKaynagi = q.Fill();
                }
            }
            catch (Exception ex)
            {
                ExceptionHandling.Hand(ex);
            }
            finally
            {
                Cursor.Current = Cursors.Default;
            }
        }
    }
}